/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package raccoon.suvisa.logica.servicios.manejador.entidades.fi.beans;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import javax.ejb.EJB;
import raccoon.suvisa.logica.servicios.manejador.entidades.fi.*;
import javax.ejb.Stateless;
import raccoon.suvisa.datos.entities.Tarjeta;
import raccoon.suvisa.datos.entities.TipoTarjeta;
import raccoon.suvisa.datos.entities.Transaccion;
import raccoon.suvisa.datos.fachadas.TarjetaRemote;
import raccoon.suvisa.datos.fachadas.TransaccionRemote;
import raccoon.suvisa.logica.servicios.localizadorServicios.LocalizadorDatosLocal;
import raccoon.suvisa.logica.serviciosweb.consumidos.WSgenericoRemote;

/**
 *
 * @author Gabriel
 */
@Stateless
public class CajaCompesacionBean implements CajaCompesacionRemote {

    @EJB
    private LocalizadorDatosLocal data;
    @EJB
    private TransaccionRemote tremote;
    @EJB
    private WSgenericoRemote ws;

    @Override
    public BigDecimal registrarPago(BigDecimal idTarjeta, Double monto, BigInteger cuotas, BigInteger cuentaDe) {
        try {
            TarjetaRemote tr = data.getFachadaDatos().getMetodosTarjeta();
            Transaccion tccion = new Transaccion();
            if (tr != null) {
                Tarjeta t = tr.getTarjeta(idTarjeta);
                if (t.getActiva() == 'V') {
                    TipoTarjeta tt = data.getFachadaDatos().getMetodosTipoTarjeta().getTipoTarjeta(new BigDecimal(t.getIdTipoTarjeta()));
                    Double cupoMax = tt.getCupomax();
                    if (t.getSaldo() < cupoMax + monto) {
                        t.setSaldo(t.getSaldo() + monto + ((monto * 0.02) * new Double(cuotas.toString())));
                        tccion.setCancelada('F');
                        tccion.setCuotas(cuotas);
                        Date d = new Date();
                        String fecha;
                        fecha = d.getDay() + "/" + d.getMonth() + "/" + d.getYear();
                        tccion.setFecha(new Date(fecha));
                        tccion.setFechacancelada(new Date(fecha));
                        String cuenta = data.getFachadaDatos().getMetodosCuenta().getCuenta(new BigDecimal(t.getIdCuenta().toString())).getNumeroCuenta().toString();
                        tccion.setIdCuentao(new BigInteger(cuenta));
                        tccion.setIdCuentad(cuentaDe);
                        tccion.setIdTransaccion(BigDecimal.ZERO);
                        tccion.setMonto(monto);
                        BigDecimal ret = tremote.guardarNuevaTransaccion(tccion);
                        if (ret != BigDecimal.ZERO) {
                            String idCliente = data.getFachadaDatos().getMetodostarjetaHabientexTarjetaRemote().gettarjetaHabientexTarjeta(idTarjeta).getNumeroidentificacionth().toString();
                            String idTransaccion = ret.toString();
                            int tipo = 1;
                            if (ws.serviciosPublicos(cuenta, fecha, idCliente, idTarjeta.toString(), idTransaccion, monto.toString())) {
                                return ret;
                            } else {
                                tremote.deshacerTransaccion(tccion.getIdTransaccion());
                            }
                        }
                    }
                }
            }
            return BigDecimal.ZERO;
        } catch (Exception e) {
            return BigDecimal.ZERO;
        }
    }


}
